package com.elegant.code.design.machine;

import lombok.Getter;
import lombok.Setter;

import java.util.HashMap;
import java.util.Map;

//@AllArgsConstructor
@Getter
public enum OrderStatus {

    GENERATED{
        @Override
        OrderStatus init() {
            getStatus().put("cdm_audit_status", 101);
            setMsg("新进订单");
            return this;
        }
    },
    AUDIT_WATING_BY_CDM{
        @Override
        OrderStatus init() {
            getStatus().put("cdm_audit_status", 200);
            setMsg("门特待审核");
            return this;
        }
    },
    AUDIT_PASSED_BY_CDM{
        @Override
        OrderStatus init() {
            getStatus().put("cdm_audit_status", 201);
            setMsg("门特审核通过");
            return this;
        }
    },
    AUDIT_REFUSED_BY_CDM{
        @Override
        OrderStatus init() {
            getStatus().put("cdm_audit_status", 202);
            getStatus().put("cdm_order_status", -100);
            setMsg("门特审核拒绝");
            return this;
        }
    },
    DISPATCHED{
        @Override
        OrderStatus init() {
            getStatus().put("stock_status", 301);
            setMsg("匹配批号成功");
            return this;
        }
    },
    AUDIT_PASSED_BY_SOCIAL{
        @Override
        OrderStatus init() {
            getStatus().put("social_audit_status", 401);
            getStatus().put("payment_status", 1);
            setMsg("社保局审核通过");
            return this;
        }
    },
    SEND_OMS_SUCCESS{
        @Override
        OrderStatus init() {
            getStatus().put("send_oms_status", 501);
            setMsg("下发OMS成功");
            return this;
        }
    },
    SEND_GOODS_SUCCESS{
        @Override
        OrderStatus init() {
            getStatus().put("send_goods_status", 601);
            setMsg("发货成功");
            return this;
        }
    },
    ABOLISHED_BY_CUSTOMERS{
        @Override
        OrderStatus init() {
            getStatus().put("cdm_order_status", -101);
            setMsg("客服废单");
            return this;
        }
    },
    CANCELED_BY_CUSTOMERS{
        @Override
        OrderStatus init() {
            getStatus().put("cancel_status", -201);
            setMsg("未发货取消");
            return this;
        }
    }

    ;

    abstract OrderStatus init();
    private Map<String, Integer> status = new HashMap<>();
    @Setter
    private String msg;
}
